#ifndef BRANCH_H
#define BRANCH_H

#include "types.h"
#include <QList>
#include <QtGlobal>

class QBranch;
class QWidget;
class QPainter;

class Branch
{
public:
    Branch(int x=2, Direction y=Direction(0), qreal fi=0, qreal laneWidth=10, int freq = 20, bool hasZebra = true);

    void draw(QPainter *painter, qreal y) const;
    void draw(QPainter *painter, qreal y, const Branch* neighbour ) const;
    int getZebraIntensity();
    void zebraIntensityUsed();

    /** @name Setters     */
    //@{
    void setNumLanes(int);
    void setDirection(Direction);
    void setFi(qreal);
    void setLaneWidth(qreal);
    void setFrequency(int);
    void setTrafficDistribution(int index, int value);
    void clearTrafficDistribution(); //ustawia wszystko na zero
    void setZebra(bool z);
    void setZebraIntensity(int);
    //@}

    /** @name Getters     */
    //@{
    qreal getFi() const;
    qreal getLaneWidth() const;
    int getNumLanes() const;
    Direction getDirection() const;
    qreal getWidth() const;
    int getFrequency() const;
    QList<int> *getTrafficDistribution();
    bool getZebra() const;
    int getRealZebraIntensity() const;
    //@}


private:
    Direction _direction;    ///< Kierunek gałęzi: wjazd lub zjazd. */
    int _numLanes;           ///< Liczba pasów w gałęzi. */
    qreal _fi;              ///< Kąt odchylenia gałęzi (zgodnie z ruchem wskazówek zegara). 0 stopni to godzina 6. */
    qreal _laneWidth;         ///< Szerokość jednego pasa. */
    int _frequencySpan;     ///< określa natężenie ruchu na danej gałęzi. Może wynosić od 0 do 100. */
    QList<int> _trafficDistribution;    /**< Lista rozkładu ruchu. Ma tyle wartości, ile jest gałęzi w rondzie. Wartości odpowiadające zjazdom mogą być niezerowe.
                                            Suma wszystkich elementów tej listy musi wynosić 100.
                                            Określa procentowy rozkład celów samochodów z danej gałęzi.
                                        */
    bool _hasZebra;         ///< Określa czy mamy pasy, czy nie. */
    int _zebraIntensity;    ///< Bazowe natężenie ruchu na przejściu dla pieszych, określane przez użytkownika. */
    int _zebraRandomIntensity;  ///< Wygenerowane chwilowe natężenie. */
    bool _zebraIntensityUsed;   ///< Flaga podnoszona zewnętrznia, dla zaznaczenia, że musimy wygenerować nowe _zebraRandomIntensity. */
    int _counter;
};



#endif // BRANCH_H
